package cn.leetcode.easy;

import java.util.ArrayList;
import java.util.List;

/**
 * 回文数：
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 * <p>
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 * -2的31次方 <= x <= 2的31次方 - 1
 *
 * @author dunlingzi
 */
public class IsPalindrome {

    public static void main(String[] args) {
        int[] x = new int[]{1000021, -123, -121, 121, 0, 1, 9, 11, 22};
        for (int i : x) {
            boolean result = Solution1.isPalindrome(i);
            System.out.println(result);
        }

    }

    /**
     * 解题思路：将整数转换成字符串，然后进行反转，比较反转前和反转后的差别
     */
    static class Solution {
        public static boolean isPalindrome(int x) {
            boolean result = false;
            StringBuilder str = new StringBuilder().append(x);
            String s1 = str.toString();
            String s2 = str.reverse().toString();
            if (s2.equals(s1)) {
                result = true;
            }
            return result;
        }
    }

    /**
     * 不将整数转化成字符串
     * 大于0
     * 个位数：1~9
     * 两位数：11、22、33、44、55、66、77、88、99、
     * 三位数：111、121、131、141、
     * 四位数：
     * 将整数取余10，获取每个位上的数值，然后判断是否对称
     */
    static class Solution1 {
        public static boolean isPalindrome(int x) {
            boolean result = false;
            if (x >= 0) {
                result = true;
                //121、1221、2332
                //将x一直除于10，获取每个位上的数据，然后判断
                List<Integer> list = new ArrayList<>();
                while (x != 0) {
                    int num = x % 10;
                    list.add(num);
                    x /= 10;
                }
                int length = list.size();
                if (length > 1) {
                    for (int i = 0; i < length; i++) {
                        if (!list.get(i).equals(list.get(length - i - 1))) {
                            result = false;
                            break;
                        }
                    }
                }
            }
            return result;
        }
    }
}